package juc.completablefuture.methods.create;

/**
 * @ClassName RunAsyncWithExecutorExample
 * @PackageName juc.completablefuture.methods.create
 * @projectName myThread
 * @Description 
 * @Author games
 * @Date 2025/8/29 上午10:52
 * @Version 1.0
 */
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class RunAsyncWithExecutorExample {
    public static void main(String[] args) {

        /**
         * 作用：执行一个没有返回值的异步任务，并指定一个自定义的执行器。
         * 返回值：一个 CompletableFuture<Void> 对象，表示异步任务的完成状态。
         * 特点：允许你指定一个特定的执行器来执行任务，而不是使用默认的执行器。
         */
        ExecutorService executor = Executors.newFixedThreadPool(2);

        CompletableFuture<Void> cf = CompletableFuture.runAsync(() -> {
            System.out.println("Running in " + Thread.currentThread().getName());
        }, executor);

        for (int i = 0; i < 10000; i++) {
            CompletableFuture.runAsync(() -> {
                System.out.println("Running in " + Thread.currentThread().getName());
            }, executor);
        }
        // 等待任务完成
        cf.join();

        // 关闭执行器
        executor.shutdown();
    }
}